#ifndef GLSPRITES_H
#define GLSPRITES_H

#include <QGLWidget>
#include <QHash>
#include <QQueue>
#include <QFontMetricsF>

struct TMLabel {
    TMLabel() {}
    TMLabel( QString text, int x, int y, QFont font, int action )
    {
        set( text, x, y, font, action );
    }
    void set( QString text, int x, int y, QFont font, int action )
    {
        this->text = text; this->x = x; this->y = y; this->action = action;
        QFontMetrics f( font );
        width = f.width( text ); height = f.height();
        x2 = x + width; y2 = y - height;
    }

    QString text;
    int x, y;
    int width, height;
    int x2, y2;
    int action;
};

class GLWidget : public QGLWidget
{
    Q_OBJECT

public:
    GLWidget();
    ~GLWidget();
    void handleKeys(QKeyEvent* e, bool isPressed);  // metodas gauna ir  apdoroja mytukų paspaudimus
    void handleControls();                          // metodas tikrina ir skaičuoja pelės judėjimą
    int doLogic();                  // logikos veiksmai

public slots:
    void mousePressEvent(QMouseEvent* e);
    void mouseMoveEvent(QMouseEvent* e);
    void mouseReleaseEvent(QMouseEvent *e);

protected:
    void initializeGL();            // GL inicijavimo metodas
    void resizeGL(int w, int h);    // GL dydžio keitimo metodas
    void paintGL();                 // kadro piešimo metodas

private:
    GLuint texture[3];  // tekstūrų masyvas

    QHash<int,bool> Kh; // Mygtukų būsenų lentelė
    QQueue<int> Kq;     // Paspaustų mygtukų eilė
    QList<int> Kl;      // Papsaustų mygtukų sąrašas

    QHash<int,bool> Mh; // pelės mygtukų busenų lentelė
    QQueue<int> Mq;
    QList<int> Ml;
    int Mdx, Mdy;       // Pelės koordinačių pokytis
    int Mx, My;         // Pelės koordinatės lango atžvilgiu
    bool move; // Ar pelė pajudėjo?
    bool hasMouseMoved; // Ar pelė pajudėjo?

    bool mouseLocked;   // ar pelė "pagauta"?
    void lockMouse();   // metodas "pagauna" pelę
    void unlockMouse(); // metodas "paleidžia" pelę

    int gameState;     // žaidimo stadija, 0 - meniu, -1, pabaiga, 1 - naujas žaidimas, 2 - žaidimo langas, 3 - nustatymai, 4 - žaidimo meniu
    int stateSelection[4]; // stadijų mygtukų pasirinkimo indeksas

    QString gameTypeStrings[2];
    QString gamePlayersStrings[2];

    int gameType;      // žaidimo tipas
    int gamePlayers;   // žaidėjų tipas

    QFont font;
    QList<TMLabel> myg[4];
    QList<TMLabel> txt[4];

};


#endif // GLSPRITES_H
